[新機能]Amazon Connect Emailがリリースされ、Amazon SESを容易に利用してユーザーとのメール送信・受信が可能になりました
Amazon Connect アドベントカレンダー 2024、3日目の記事です!
クラスメソッドとギークフィードさん、クラウドビルダーズさん、ネットプロテクションズさん、AWSJさんの有志が募ってチャレンジしている企画になります。
(アドベントカレンダーのカレンダー一覧はこちら↓)
はじめに
Amazon Connect Emailが一般提供され、Amazon SESを活用したユーザーとのメールコミュニケーションが容易になりました。
まず、コールセンターとコンタクトセンターの違いについて説明します。コールセンターは顧客対応のチャネルが電話のみに限定されますが、コンタクトセンターは電話、Eメール、Web、チャット、FAX、ハガキなど、複数のチャネルを通じて顧客対応を行います。
Amazon Connectはコンタクトセンターであり、今回のアップデートでEメールチャネルが正式に追加されました。これまでもカスタマイズによってEメール機能の実装は可能でしたが、Amazon Connect Emailのリリースにより、より簡単に導入できるようになりました。
Amazon Connect Emailは、Amazon Connectの音声、チャット、SMS、タスク、ウェブ通話など、他のチャネルと同じ方法で設定、ルーティング、分析が可能で、エージェントも同じ操作環境で対応できます。
Amazon Connect Emailの活用シーン例をいくつか挙げます。
- 問い合わせメールの受信と対応
- ウェブサイトやモバイルアプリのお問い合わせフォームからのメール受信、および内容に基づいてAmazon Connect Casesを自動作成
- メールの内容や緊急度に応じた適切なエージェントへの自動ルーティングと、定型的な問い合わせへの自動返信
- プロアクティブなメールコミュニケーション
- アウトバウンドキャンペーン機能(東京リージョン未対応)と連携した、顧客の属性や行動履歴に基づくパーソナライズされたメール配信
- 商品のお知らせやサービス更新情報の配信、アンケートや満足度調査の実施
- 他チャネルとの連携
- 電話での問い合わせ内容の要約や留守番電話の文字起こしを管理者やオペレーターにメールで送信
- カスタマーサポート業務の効率化
- メールテンプレートを活用した返信の標準化と、メール対応の優先順位付けおよび自動割り当て
従来、顧客へのメール送信については、これまではConnectからAWS Lambdaを呼び出し、Amazon SNSやAmazon SESを使用する必要がありました。
しかし、Amazon Connect Emailのリリースにより、専用のフローブロックが用意され、プログラミングなしでメール送信機能を実装できるようになりました。
やってみた
今回は、メールでの顧客とのやりとり(送受信)ではなく、「電話がかかってきたが出られなかったため、管理者にメール通知する。」というシーンを想定して作成してみます。
Amazon Connect メールドメインを取得する
サービスロール作成後、ドメインを追加します。
ドメインは、今回は[Amazon Connect の E メールドメイン]を選択します。カスタムドメインも利用可能です。
Connectインスタンス名.email.connect.aws
というEメールドメインが自動生成されます。
すぐに作成されます。
Amazon SESページでも確認できます。
Virtual Deliverability Managerの推奨事項
Virtual Deliverability Managerを有効化すると、[MAIL FROM レコードが調整されていません]という推奨事項が表示されます。
ただし、当該ドメインやDNSプロバイダはユーザー管理のものではないため、このドメインに対してカスタムMAIL FROMドメインを設定することはできません。そのため、この推奨事項は無視します。
メール保存先設定
メール内容をS3バケットに保存するための設定を行います。
[データストレージ]から[メールメッセージ]を有効化します。
S3バケットを選択します。通話記録と同じ保存先を使用しても問題ありません。
データストレージの添付ファイルを有効化している場合、S3バケットポリシーに対して、CORSポリシーを設定する必要があります。詳細はドキュメントをご参照ください。
メールを作成
Connectの管理コンソールにログイン後、セキュリティプロファイルで[Email addresses]を有効化します。
有効化後、チャネルに[メールアドレス]が追加されますので遷移します。
メールアドレスを作成します。
ドメインは先程のConnectのデフォルトドメインです。エイリアスを記載します。今回は受信はしないのでフローは選択しなくてよいです。
Connectフロー
フローは以下の通りです。
(クリックで展開)
{
"Version": "2019-10-30",
"StartAction": "7610ef41-4841-4811-b850-8f70f9a65a15",
"Metadata": {
"entryPointPosition": {
"x": 40,
"y": 40
},
"ActionMetadata": {
"3b77e8d4-c19d-4203-bd5a-07f305032951": {
"position": {
"x": 358.4,
"y": 218.4
},
"children": [
"b1acd6db-72b7-4446-9cb5-c0e5edf065a8"
]
},
"b1acd6db-72b7-4446-9cb5-c0e5edf065a8": {
"position": {
"x": 358.4,
"y": 218.4
},
"parameters": {
"FromEmailAddress": {
"EmailAddress": {
"displayName": "test<test@xxxxx.email.connect.aws>"
}
}
}
},
"7610ef41-4841-4811-b850-8f70f9a65a15": {
"position": {
"x": 138.4,
"y": 41.6
}
},
"e6a89f5d-55d6-4977-8bab-54fd3fc6ec2b": {
"position": {
"x": 784.8,
"y": 486.4
}
},
"2fddaddd-01e5-44c3-8dcf-7ae454460192": {
"position": {
"x": 359.2,
"y": 37.6
},
"overrideConsoleVoice": true
},
"e4189509-8a36-47b3-ae40-e21e35014252": {
"position": {
"x": 572,
"y": 221.6
}
},
"e4a2db7c-b4eb-4521-b623-df6939064a73": {
"position": {
"x": 568.8,
"y": 417.6
}
},
"58d95d29-6389-4c25-bac9-5c4db4b1e8f0": {
"position": {
"x": 136.8,
"y": 223.2
},
"parameters": {
"Attributes": {
"UserPhoneNumber": {
"useDynamic": true
},
"ContactId": {
"useDynamic": true
}
}
},
"dynamicParams": [
"UserPhoneNumber",
"ContactId"
]
}
},
"Annotations": [],
"name": "cm-hirai-mail",
"description": "",
"type": "contactFlow",
"status": "PUBLISHED",
"hash": {}
},
"Actions": [
{
"Parameters": {
"Channel": "EMAIL"
},
"Identifier": "3b77e8d4-c19d-4203-bd5a-07f305032951",
"Type": "CreateContact",
"Transitions": {
"NextAction": "b1acd6db-72b7-4446-9cb5-c0e5edf065a8",
"Errors": [
{
"NextAction": "e4a2db7c-b4eb-4521-b623-df6939064a73",
"ErrorType": "NoMatchingError"
}
]
}
},
{
"Parameters": {
"FromEmailAddress": {
"EmailAddress": "test@xxxxx.email.connect.aws"
},
"DestinationEmailAddress": {
"EmailAddress": "xxx@xxx",
"DisplayName": "TestUser"
},
"EmailMessage": {
"MessageSourceType": "RAW",
"RawMessage": {
"Subject": "Test",
"Body": "お客様からのお電話を承りましたが、お繋ぎできませんでした。\n\n■ご連絡内容\n・発信元電話番号:$.Attributes.UserPhoneNumber\n・コンタクトID:$.Attributes.ContactId\n\nなお、このメールは自動送信されております。\n本メールへの返信はできませんので、予めご了承ください。",
"ContentType": "text/plain"
}
}
},
"Identifier": "b1acd6db-72b7-4446-9cb5-c0e5edf065a8",
"Type": "StartOutboundEmailContact",
"Transitions": {
"NextAction": "e4189509-8a36-47b3-ae40-e21e35014252",
"Errors": [
{
"NextAction": "e4a2db7c-b4eb-4521-b623-df6939064a73",
"ErrorType": "NoMatchingError"
}
]
}
},
{
"Parameters": {
"FlowLoggingBehavior": "Enabled"
},
"Identifier": "7610ef41-4841-4811-b850-8f70f9a65a15",
"Type": "UpdateFlowLoggingBehavior",
"Transitions": {
"NextAction": "2fddaddd-01e5-44c3-8dcf-7ae454460192"
}
},
{
"Parameters": {},
"Identifier": "e6a89f5d-55d6-4977-8bab-54fd3fc6ec2b",
"Type": "DisconnectParticipant",
"Transitions": {}
},
{
"Parameters": {
"TextToSpeechEngine": "Neural",
"TextToSpeechStyle": "None",
"TextToSpeechVoice": "Kazuha"
},
"Identifier": "2fddaddd-01e5-44c3-8dcf-7ae454460192",
"Type": "UpdateContactTextToSpeechVoice",
"Transitions": {
"NextAction": "58d95d29-6389-4c25-bac9-5c4db4b1e8f0"
}
},
{
"Parameters": {
"Text": "メール送信しました。"
},
"Identifier": "e4189509-8a36-47b3-ae40-e21e35014252",
"Type": "MessageParticipant",
"Transitions": {
"NextAction": "e6a89f5d-55d6-4977-8bab-54fd3fc6ec2b",
"Errors": [
{
"NextAction": "e6a89f5d-55d6-4977-8bab-54fd3fc6ec2b",
"ErrorType": "NoMatchingError"
}
]
}
},
{
"Parameters": {
"Text": "メール送信に失敗しました。"
},
"Identifier": "e4a2db7c-b4eb-4521-b623-df6939064a73",
"Type": "MessageParticipant",
"Transitions": {
"NextAction": "e6a89f5d-55d6-4977-8bab-54fd3fc6ec2b",
"Errors": [
{
"NextAction": "e6a89f5d-55d6-4977-8bab-54fd3fc6ec2b",
"ErrorType": "NoMatchingError"
}
]
}
},
{
"Parameters": {
"Attributes": {
"UserPhoneNumber": "$.CustomerEndpoint.Address",
"ContactId": "$.InitialContactId"
},
"TargetContact": "Current"
},
"Identifier": "58d95d29-6389-4c25-bac9-5c4db4b1e8f0",
"Type": "UpdateContactAttributes",
"Transitions": {
"NextAction": "3b77e8d4-c19d-4203-bd5a-07f305032951",
"Errors": [
{
"NextAction": "3b77e8d4-c19d-4203-bd5a-07f305032951",
"ErrorType": "NoMatchingError"
}
]
}
}
]
}
[メッセージを送信]ブロックでは以下の設定にします
- 送信するメッセージタイプ:Eメール
- From:作成済みメールアドレス
- To
- メールアドレス:自身のメールアドレス
- 表示名:TestUser
- メッセージは以下の通りです。
お客様からのお電話を承りましたが、お繋ぎできませんでした。
■ご連絡内容
・発信元電話番号:$.Attributes.UserPhoneNumber
・コンタクトID:$.Attributes.ContactId
なお、このメールは自動送信されております。
本メールへの返信はできませんので、予めご了承ください。
メッセージは、フロー内で設定されたユーザー定義属性を使用して動的に設定できます。
コンタクト属性では、発信元電話番号とコンタクトIDの2つを定義しています。
- キー:UserPhoneNumber
- 名前空間:システム
- キー:顧客のエンドポイントアドレス
- キー:ContactId
- 名前空間:システム
- キー:初回のコンタクト ID
Amazon SES サンドボックス外
以下の記事を参考にAmazon SES サンドボックスを解除します。
メール送信を試してみる
電話をかけたところ、設定した内容でメール送信されました。
メール文章には、コンタクトIDと発信元電話番号も確認できました。
S3バケットには以下の内容で保存されていました。
{"contentType":"text/plain","messageContent":"お客様からのお電話を承りましたが、お繋ぎできませんでした。\n\n■ご連絡内容\n・発信元電話番号:+81xxxxxxxxxx\n・コンタクトID:c766dd57-16e4-47c0-8425-3354d419e267\n\nなお、このメールは自動送信されております。\n本メールへの返信はできませんので、予めご了承ください。"}
保存先S3 URIは以下です
- s3://<S3バケット名>/connect/<Connectインスタンス名>/EmailMessages/2024/12/01/cdf1a4eb-7c93-4e42-9fb4-e3cb49525c61_d15a9938-675b-43ac-9c11-2a2f405f6ae1_20241201T23:49_UTC.json
料金
メール料金は、英語のみで価格を確認できます。
Amazon Connect Emailは、メール 1 件あたり、0.05$かかります。受信や送信どちらでも同じ金額です。Connectの電話料金のように、メールアドレスの保持料金はありません。
さらに、Amazon Connect Emailは、Amazon SESを使用してメールを送受信するため、Amazon Simple Email Service (SES)の料金も発生します。
料金表の価格例では、メール 1 通あたり 0.00036 USDとしていますので、この料金を目安にお考えください。
この場合、Amazon SES 経由で送受信されるメール 1 通あたりの推定平均コストは、メール 1 通あたり 0.00036 USD です (料金は、メールメッセージと添付ファイルのサイズ、宛先および Cc ヘッダーフィールドの受信者数、専用 IP アドレスや仮想配信マネージャなどの有効な追加の Amazon SES 機能によって異なります)。
直接比較するものではありませんが、固定の相手にメールを送信する場合は、Amazon SNSの方がコストを抑えられます。
Email/Email-JSON:USD 2.00/10 万通知
参考
Amazon ConnectとBedrockのサービスを連携させて、メールの自動分析を行うブログも投稿されました。